<?php
class AutenticacaoController extends Zend_Controller_Action
{
	protected $_email;
	protected $_codigo_seguranca;
	protected $_log_envia_email;
	protected $_usuario;
	
    public function init ()
    {
    	$this->_email = new Application_Model_Email();
    	$this->_codigo_seguranca = new Application_Model_CodigoSeguranca();
    	$this->_log_envia_email = new Application_Model_LogEnviaEmail();
    	$this->_usuario = new Application_Model_Usuario();
    }
    public function indexAction ()
    {
        $this->_redirect('/autenticacao/login');
    }
    /**
     * Realizar a autenticação no sistema
     */
    public function loginAction ()
    {
        $objFormLogin = new Application_Form_Login();
        $objFormLogin->getElement('submit')->setName('Entrar');
        $this->view->form = $objFormLogin;        
        if ($this->getRequest()->isPost()) {
            $dadosForm = $this->getRequest()->getPost();
            if ($objFormLogin->isValid($dadosForm)) {
                $authAdapter = new Zend_Auth_Adapter_DbTable(
                Zend_Registry::get('db'), 'usuario', 'login', 'senha','sha1(?)');
                //pegando dados do formulario
                $authAdapter->setIdentity($dadosForm['login'])->setCredential($dadosForm['senha']);
                $resultado = $authAdapter->authenticate();
                //verificando se autenticacao foi realizada com sucesso
                if ($resultado->isValid()) {
                    $auth = Zend_Auth::getInstance();
                    $dadosBd = $authAdapter->getResultRowObject(null,'senha');
                    $auth->getStorage()->write($dadosBd);
                    $usu_logado = $auth->getIdentity();
                    $this->_redirect('/admin/');
                } else {
                    $this->_helper->flashMessenger(array('flashmessage' => '<div id=\'erro-login\' class=\'ui-state-error ui-corner-all\' style=\'padding: 0 .7em; width:350px; height:18px;\'><span class=\'ui-icon ui-icon-alert\' style=\'float: left; margin-right: .3em;\'></span>Usuário ou senha inválidos</div>'));
                }
            }
        }
    }
    /**
     * Sair do sistema
     */
    public function logoutAction ()
    {
        $auth = Zend_Auth::getInstance();
        $auth->clearIdentity();
        $this->_redirect('index');
    }
    
    /**
     * Redefinir senha caso usuario tenha esquecido, enviando um link de alteraçao por email
     */
    public function recuperarSenhaAction()
    {
    	$form = new Application_Form_RecuperaSenha();
    	$form->getElement('submit')->setName('Enviar');
        $this->view->form = $form;  
         if ($this->getRequest()->isPost()) 
         { 
         	 $dadosForm = $this->getRequest()->getPost();
            if ($form->isValid($dadosForm)) 
            {
            	$email = $dadosForm['email'];
            	$data = $this->_usuario->findByEmail(strtolower($email));
            	if(count($data)!=0){
            		$cod1 = mt_rand();
            		$cod2 = md5(date('Hisu'));
            		$codigoSeguranca = sha1($cod1).$cod2;
            		$idusuario = $data['idusuario'];  
            		$mensagem = $this->_log_envia_email->templateEmailRecuperarSenha($codigoSeguranca);
            		$this->_codigo_seguranca->inactiveCodeByIdUser($idusuario);
            		$this->_log_envia_email->inactiveLogEnviaEmailByIdUser($idusuario);            		        		
            		$this->_codigo_seguranca->gerarCodigo($idusuario, $codigoSeguranca, 0);
            		$this->_log_envia_email->inserirLogEnvioEmail($mensagem, 0, $email, $idusuario);
            		$this->_redirect('/autenticacao/email-enviado');
            	}else{
            		 $this->_helper->flashMessenger(array('flashmessage' => '<div id=\'erro-login\' class=\'ui-state-error ui-corner-all\' style=\'padding: 0 .7em; width:400px; height:18px;\'><span class=\'ui-icon ui-icon-alert\' style=\'float: left; margin-right: .3em;\'></span>E-mail não existe em nosso banco de dados!</div>'));
            	}
            }
         }     
    }
    public function changePasswordAction()
    {
    	if ($this->_hasParam('codigo') == false) 
    	{
            $this->_redirect('/autenticacao');
        } else {
    		$codigoSeguranca = $this->_request->getParam('codigo');
    		$data = $this->_codigo_seguranca->findByCodigoSeguranca($codigoSeguranca);
            $form = new Application_Form_EditarSenha();
            $form->getElement('Salvar')->setValue('Alterar');
            $form->getElement('idusuario')->setValue($data['idusuario']);
            $form->getElement('Salvar')->setName('Alterar');
            $form->removeElement('senhaAtual');
            $this->view->form = $form;
            if ($this->_request->isPost()) {
                $dadosForm = $this->_request->getPost();
                if ($form->isValid($dadosForm)) {                    
                    	$this->_usuario->changePassword($data['idusuario'], sha1($dadosForm['senha']));
                    	$this->_codigo_seguranca->inactiveCodeByIdUser($data['idusuario']);
                    	$this->_redirect('/autenticacao/sucesso-redefinicao');
                }
            }
        }
    	
    }
    public function emailEnviadoAction()
    {    	
    }
    public function sucessoRedefinicaoAction()
    {
    	$this->_helper->flashMessenger(array('flashmessage'=>'Senha redefinida com sucesso!'));
    }
    
}

